FROM python:3.6

# 声明维护人员联系方式
LABEL maintainer="wubai@inspur.com"
RUN mkdir /server
# python文件保存及后续命令执行的根目录
WORKDIR /server

# 安装必要的系统组件
RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list \
  && sed -i s@/deb.debian.org/@/mirrors.aliyun.com/@g /etc/apt/sources.list \
  && apt-get clean \
  && apt-get -q update \
  && apt-get -qy install netcat

# 添加python文件到/server目录
# ADD app/ app/
# ADD wait-for.sh requirements.txt manage.py mybook api ./
ADD wait-for.sh requirements.txt manage.py ./
ADD mybook ./mybook
ADD api ./api

# 安装项目依赖
RUN pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/

# 设置程序运行所需环境变量，及其初始值
# 最终运行期的变量值以docker-compose文件中的设置为准
ENV DB_HOST=""
ENV DB_PORT=""
ENV DB_USERNAME=""
ENV DB_PASSWORD=""
ENV REDIS_HOST=""

# 暴露服务端口
EXPOSE 8000

# 程序启动命令
# 由于Python程序启动较快，很有可能出现启动完成时数据库服务尚未完成初始化的情况
# 此处提供了一个wait-for.sh脚本，基于netcat命令不持续检测数据库的状态
ENTRYPOINT [ "sh", "-c", "./wait-for.sh $DB_HOST:$DB_PORT -- python3 manage.py makemigrations && python3 manage.py migrate && python3 manage.py runserver 0.0.0.0:8000" ]